//设计101序列检测器
//制作者：FPGA研究者
//时间：2022年7月5日

// 单段法：现态和次态和输出同时合并
 module fsm_seq101_one(clk,rst,in,q);
    input clk,rst,in;
	 output reg q;
	 reg [2:0] state;//省略了次态
	 parameter s0=2'b00,s1=2'b01,s2=2'b11,s3=2'b10;//状态编码，采用格雷码编码方式

	 always@(posedge clk or negedge rst) begin  //定义状态
	 if(!rst) begin state<=s0;q=0;end
	 else if(state==s0) 
	     begin if(in) begin state=s1;q=0;end
		         else begin state=s0;q=0; end end
	 else if(state==s1)
	     begin if(in) begin state=s1;q=0;end
		         else begin state=s2;q=0; end end
    else if(state==s2)
        begin if(in) begin state=s3;q=0;end
		         else begin state=s0; q=0; end end
    else if(state==s3)
       begin if(in) begin state=s1;q=1;end
		         else begin state=s2; q=1; end end
	 else begin state=s0;q=0;end
	 end
  endmodule
		

	 

	 
